package br.unifor.ads.desphouse.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

import javax.swing.JButton;

import br.unifor.ads.desphouse.business.LancamentoBusiness;
import br.unifor.ads.desphouse.costumer.JTableAdapter;
import br.unifor.ads.desphouse.exception.BusinessException;
import br.unifor.ads.desphouse.internacionalizacao.Dicionario;
import br.unifor.ads.desphouse.to.LancamentoTO;
import br.unifor.ads.desphouse.util.MensagemUtil;

/**
 * 
 * @author Alex Girao
 */
public class PainelLancamentoListagem extends PainelGenerico {

	private static final long serialVersionUID = 8180514454011345176L;
	
	private LancamentoBusiness lancamentoBusiness;
	
	private JTableAdapter table;
	private static final String[] COLUNAS_TABELA = 
	{Dicionario.COMUNS_CODIGO,Dicionario.COMUNS_DESCRICAO,
	Dicionario.COMUNS_ENTRADA,Dicionario.COMUNS_DATA,
	Dicionario.COMUNS_FINALIDADE, Dicionario.COMUNS_PARCELAS, 
	Dicionario.COMUNS_TOTAL};
	private JButton jbtNovo;
	private JButton jbtDetalhar;
	private JButton jbtExcluir;
	private JButton jbtPesquisar;
	private JButton jbtEditar;
	private Boolean isReceita;

	/**
	 * Create the panel.
	 * @param b 
	 */
	public PainelLancamentoListagem(boolean isReceita) {
		super();
		lancamentoBusiness = new LancamentoBusiness();
		this.isReceita = isReceita;
		iniciarComponentes();
		aplicarEventos();
		desabilitarAcoesRegistro();
	}
	
	@Override
	protected void iniciarComponentes() {
		jbtNovo = new JButton(Dicionario.COMUNS_NOVO);
		jbtNovo.setBounds(12, 12, 117, 25);
		add(jbtNovo);
		
		jbtExcluir = new JButton(Dicionario.COMUNS_EXCLUIR);
		jbtExcluir.setBounds(365, 125, 117, 25);
		add(jbtExcluir);
		
		jbtEditar = new JButton(Dicionario.COMUNS_EDITAR);
		jbtEditar.setBounds(236, 125, 117, 25);
		add(jbtEditar);
		
		jbtPesquisar = new JButton(Dicionario.COMUNS_PESQUISAR);
		jbtPesquisar.setBounds(365, 76, 117, 25);
		add(jbtPesquisar);
		
		jbtDetalhar = new JButton(Dicionario.COMUNS_DETALHAR);
		jbtDetalhar.setBounds(365, 76, 117, 25);
		//add(jbtDetalhar);
		
		table = new JTableAdapter(COLUNAS_TABELA,12, 157, 470, 431);
		pesquisar();
		add(table);
		
	}

	@Override
	protected void aplicarEventos() {
		jbtNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				telaPai.atualizarPainel(new PainelLancamentoCadastro());
			}
		});
		jbtPesquisar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				pesquisar();
			}
		});
		jbtExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				excluir();
			}
		});
		jbtEditar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				editar();
			}
		});
		jbtDetalhar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				detalhar();
			}
		});
		table.addMouseListener(new MouseListener() {
			public void mouseReleased(MouseEvent arg0) {}
			public void mousePressed(MouseEvent arg0) {}
			public void mouseEntered(MouseEvent arg0) {}
			public void mouseExited(MouseEvent arg0) {}
			public void mouseClicked(MouseEvent arg0) {
				habilitarAcoesRegistro();
			}
		});
	}
	
	private void habilitarAcoesRegistro(){
		jbtEditar.setEnabled(true);
		jbtExcluir.setEnabled(true);
		jbtDetalhar.setEnabled(true);
	}
	
	private void desabilitarAcoesRegistro(){
		jbtEditar.setEnabled(false);
		jbtExcluir.setEnabled(false);
		jbtDetalhar.setEnabled(false);
	}
	
	private void excluir(){
		boolean confirmado = MensagemUtil.confirmarAcao(telaPai, Dicionario.COMUNS_CONFIRMAR_ACAO);
		if(confirmado){
			String codigo = table.getValueAt(table.getSelectedRow(), 0).toString();
			try{
				lancamentoBusiness.excluirPorCodigo(Long.parseLong(codigo));
				MensagemUtil.exibirPopUpInformacao(telaPai, Dicionario.MENSAGEM_REMOVIDO_SUCESSO);
				pesquisar();
			}catch(Exception e){
				e.printStackTrace();
				MensagemUtil.exibirPopUpErro(telaPai, Dicionario.CRITICA_COMUNS_FALHA_REMOVER);
			}
		}
	}
	
	private void atualizarTable(List<LancamentoTO> list){
		table.limparLinhas();
		if(!list.isEmpty()){
			for (LancamentoTO to : list) {
				table.adicionarLinha(new Object[]
					{to.getLancamento().getCodigo(),to.getLancamento().getDescricao(),
					to.getLancamento().getData(),to.getLancamento().getLancamentoTipo().getDescricao(),
					to.getNumParcelas(),to.getValorTotal()}
				);
			}
		}else{
			MensagemUtil.exibirPopUpInformacao(telaPai, Dicionario.MENSAGEM_DADOS_NAO_ENCONTRADOS);
		}
	}
	
	private void pesquisar(){
		try{
			LancamentoTO to = new LancamentoTO();
			List<LancamentoTO> list = lancamentoBusiness.buscarPorFiltro(to);
			atualizarTable(list);
		}catch(BusinessException e){
			e.printStackTrace();
			MensagemUtil.exibirPopUpErro(telaPai, Dicionario.CRITICA_COMUNS_FALHA_PESQUISA);
		}
	}
	
	private void editar(){
		String codigo = table.getValueAt(table.getSelectedRow(), 0).toString();
		telaPai.atualizarPainel(new PainelLancamentoCadastro(Long.parseLong(codigo)));
	}
	
	private void detalhar(){
		String codigo = table.getValueAt(table.getSelectedRow(), 0).toString();
		telaPai.atualizarPainel(new PainelLancamentoDetalhamento(Long.parseLong(codigo)));
	}

	

}
